package 自编程题;

import java.util.Arrays;
import java.util.Stack;

/**
 * 输入一个链表的头节点，从尾到头反过来返回每个节点的值（用数组返回）。

 * 示例 1：
 * 输入：head = [1,3,2]
 * 输出：[2,3,1]
 * Definition for singly-linked list.单列表的定义
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 * */
public class 从尾到头打印链表 {

    public static void main(String[] args) {
        ListNode listNode1=new ListNode(0);
        ListNode x=new ListNode(0);
        x=listNode1;
        for (int i=0;i<10;){
           // listNode1.val=i;
            listNode1.next=new ListNode(++i);
            listNode1=listNode1.next;
        }
        System.out.println(Arrays.toString(reversePrint(x.next)));
    }
    public static int[] reversePrint(ListNode head) {
        Stack<ListNode> stack=new Stack<>();
        ListNode sun=head;
        while(sun!=null){
            stack.push(sun);
            sun=sun.next;
        }
        int []m=new int[stack.size()];
        int x=stack.size();
        for(int i=0;i<x;i++)
            m[i]=stack.pop().val;
        return m;
    }
    private static class ListNode {
       int val;
       ListNode next;
       ListNode(int x) { val = x; }
    }
}
/**
 * 从头到尾打印链表，首先就是需要了解栈这个数据结构，栈内的数据是按照先进后出的规则进行的。
 * 所以说吧链表中的数据依次的压入栈中，然后用数组存储依次出栈的数据，然后用Arrays.toString方法进行遍历
 * */